package com.tedu.api;

import org.junit.Test;

/**
 * Java面向对象---不是真正的面向对象------八大基本数据类型
 * 创建对象--类【属性、构造器、方法】
 *8个包装类：根据八大数据基本类型提供对应包装类
 *八的基本数据类型              对应八大基本数据类型对应包装类
 *     int                       Integer              继承Number父类【抽象】
 *     long                      Long                 继承Number父类【抽象】
 *     double                    Double               继承Number父类【抽象】
 *     short                     Short                继承Number父类【抽象】
 *     float                     Float                继承Number父类【抽象】
 *     byte                      Byte                 继承Number父类【抽象】
 *     char                      Char                 继承Object父类【抽象】
 *     boolean                   Boolean              继承Object父类【抽象】
 *
 */

public class PackingAPI {
    @Test
    public void testInteger() {
        int a = 1; //不是面向对象，通过.【反射】
        //创建int类型对象
        Integer i = new Integer(a);
        i.toString();
    }

    /**
     * 包装类API
     * xxxValue方法 ===静态方法valueOf      返回值：对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     * 测试：6个包装类
     */
    @Test
    public void testxxxValue() {
        Integer i = new Integer(2); //打包：对应类型放入包装类
        i = i.intValue(); //int类型和Integer
        System.out.println(i);
        //测试：其他7个包装类
        //String s1="123.123"      Double
        //String s2="1";           Byte
        //String s3="123.123F";    Float
        //String s4="124L";        Long
        //String s5="true";        Boolean
        //String s6="a";           Charter
    }
    /**包装具备静态方法
     * 静态方法valueOf   返回值：对应数据类型
     * 作用：把包装类转换为基本数据类型的方法
     */
    @Test
    public void testValueOf(){
        int i=Integer.valueOf(1); //打包拆包一体化
       boolean b=Boolean.valueOf(true);
        char c=Character.valueOf('1');
        Float.valueOf(1.123F); //1.123默认double  编译工具
    }
    /**
     * 包装类--------------------------------Servlet【JavaBean】
     * public class Person{
     *     Integer  id;//成员---解析
     * }
     * parseXXX（）   静态方法     返回值：对应类型
     * 作用：将获取到的字符串转换为对应类型
     */
    @Test
    public void testParseXXX(){
        String s="123"; //将字符串转换为整形
        int i=Integer.parseInt(s); //区别：解析字符串，转换为正确类型
        int is=Integer.valueOf(s); //区别：存入值，打包拆包获取值
        System.out.println(i);
        //整形转换为字符串
        String s1=String.valueOf(123); //与包装类，用法一致，实现不一致
        //自己测：String s2="456f";   char s3="a";
        String s2="456f";
        float f=Float.parseFloat(s2);
        System.out.println(f);
        char s3='a';
        //Character 没有针对字符的解析
    }
    /**自动拆装箱
     * JDK1.5之前没有自动拆装箱
     * JDK1.5之后没有自动拆装箱    2004
     */
@Test
    public void testJ(){
    //JDK1.5之前没有自动拆装箱
    Integer in=Integer.valueOf(1); //装箱
    int ii=in.intValue(); //拆箱
    //JDK1.5之后没有自动拆装箱
    Integer i=1;
    int is=1;
    //编译器帮我们写了拆装箱过程---JVM虚拟机认1.5之前写法
}

}
